# from sklearn.metrics import confusion_matrix
# import matplotlib.pyplot as plt
#
# y_pred = [] # ['2','2','3','1','4'] # 类似的格式
# y_true = [] # ['0','1','2','3','4'] # 类似的格式
# # 对上面进行赋值
#
# C = confusion_matrix(y_true, y_pred, labels=['0','1','2','3','4']) # 可将'1'等替换成自己的类别，如'cat'。
#
# plt.matshow(C, cmap=plt.cm.Reds) # 根据最下面的图按自己需求更改颜色
# # plt.colorbar()
#
# for i in range(len(C)):
#     for j in range(len(C)):
#         plt.annotate(C[j, i], xy=(i, j), horizontalalignment='center', verticalalignment='center')
#
# # plt.tick_params(labelsize=15) # 设置左边和上面的label类别如0,1,2,3,4的字体大小。
#
# plt.ylabel('True label')
# plt.xlabel('Predicted label')
# # plt.ylabel('True label', fontdict={'family': 'Times New Roman', 'size': 20}) # 设置字体大小。
# # plt.xlabel('Predicted label', fontdict={'family': 'Times New Roman', 'size': 20})
# plt.show()


# import matplotlib.pyplot as plt
#
# guess = ["normal", "cancer"]
# fact = ["normal", "cancer"]
# classes = list(set(fact))
# classes.sort(reverse=True)
# r1 = [[367, 16], [33, 384]]
#
# plt.figure(figsize=(8, 6))  # 设置plt窗口的大小
# confusion = r1
# print("confusion", confusion)
# plt.imshow(confusion, cmap=plt.cm.Blues)
# indices = range(len(confusion))
# indices2 = range(3)
# plt.xticks(indices, classes, rotation=40, fontsize=18)
# plt.yticks([0.00, 1.00], classes, fontsize=18)
# plt.ylim(1.5, -0.5)  # 设置y的纵坐标的上下限
#
# plt.title("Confusion matrix", fontdict={'weight': 'normal', 'size': 18})
# # 设置color bar的标签大小
# cb = plt.colorbar()
# cb.ax.tick_params(labelsize=18)
# plt.xlabel('Predict label', fontsize=18)
# plt.ylabel('True label', fontsize=18)
#
# print("len(confusion)", len(confusion))
# for first_index in range(len(confusion)):
#     for second_index in range(len(confusion[first_index])):
#
#         if confusion[first_index][second_index] > 200:
#             color = "w"
#         else:
#             color = "black"
#         plt.text(first_index, second_index, confusion[first_index][second_index], fontsize=18, color=color,
#                  verticalalignment='center', horizontalalignment='center', )
# plt.show()


# from sklearn.metrics import confusion_matrix
# from sklearn.metrics import recall_score
#
# guess = [1, 0, 1, 2, 1, 0, 1, 0, 1, 0]
# fact = [0, 1, 0, 1, 2, 1, 0, 1, 0, 1]
# a = confusion_matrix(guess, fact)
# print(a)
# '''
# [[0 5]
#  [5 0]]
# '''


# from sklearn.metrics import confusion_matrix
# from sklearn.metrics import recall_score
# import matplotlib.pyplot as plt
#
# guess = [1, 0, 1, 2, 1, 0, 1, 0, 1, 0]
# fact = [0, 1, 0, 1, 2, 1, 0, 1, 0, 1]
# classes = list(set(fact))
# # print(classes) # 0 1 2
# classes.sort()
# confusion = confusion_matrix(guess, fact)
# plt.imshow(confusion, cmap=plt.cm.Blues)
# indices = range(len(confusion))
# plt.xticks(indices, classes)
# plt.yticks(indices, classes)
# plt.colorbar()
# plt.xlabel('guess')
# plt.ylabel('fact')
# for first_index in range(len(confusion)):
#     for second_index in range(len(confusion[first_index])):
#         plt.text(first_index, second_index, confusion[first_index][second_index])
#
# plt.show()

from sklearn.metrics import confusion_matrix
from sklearn.metrics import recall_score
import matplotlib.pyplot as plt

# 预测数据，predict之后的预测结果集
guess = [1, 0, 1, 2, 1, 0, 1, 0, 1, 0]
# 真实结果集
fact = [0, 1, 0, 1, 2, 1, 0, 1, 0, 1]
# 类别
classes = list(set(fact))
# 排序，准确对上分类结果
classes.sort()
# 对比，得到混淆矩阵
confusion = confusion_matrix(guess, fact)
# 热度图，后面是指定的颜色块，gray也可以，gray_x反色也可以
plt.imshow(confusion, cmap=plt.cm.Blues)
# 这个东西就要注意了
# ticks 这个是坐标轴上的坐标点
# label 这个是坐标轴的注释说明
indices = range(len(confusion))
# 坐标位置放入
# 第一个是迭代对象，表示坐标的顺序
# 第二个是坐标显示的数值的数组，第一个表示的其实就是坐标显示数字数组的index，但是记住必须是迭代对象
plt.xticks(indices, classes)
plt.yticks(indices, classes)
# 热度显示仪？就是旁边的那个验孕棒啦
plt.colorbar()
# 就是坐标轴含义说明了
plt.xlabel('guess')
plt.ylabel('fact')
# 显示数据，直观些
for first_index in range(len(confusion)):
    for second_index in range(len(confusion[first_index])):
        plt.text(first_index, second_index, confusion[first_index][second_index])

# 显示
plt.show()

# PS:注意坐标轴上的显示，就是classes
# 如果数据正确的，对应关系显示错了就功亏一篑了
# 一个错误发生，想要说服别人就更难了